/**
 * 视频通话相关API接口
 */
import request from '@/utils/request'

/**
 * 发起视频通话
 * @param {Object} data - 通话参数
 * @param {Number} data.calleeId - 被叫用户ID
 * @param {Number} data.calleeType - 被叫用户类型（默认1）
 * @param {Number} data.callType - 通话类型（1=语音，2=视频）
 */
export function initiateCall(data) {
  return request.post('/im/video-call/initiate', data)
}

/**
 * 接受视频通话
 * @param {String} callId - 通话ID
 */
export function acceptCall(callId) {
  return request.post(`/im/video-call/accept/${callId}`)
}

/**
 * 挂断视频通话
 * @param {String} callId - 通话ID
 */
export function hangupCall(callId) {
  return request.post(`/im/video-call/hangup/${callId}`)
}

/**
 * 发送WebRTC信令
 * @param {Object} data - 信令数据
 * @param {String} data.callId - 通话ID
 * @param {String} data.type - 信令类型（offer/answer/ice-candidate）
 * @param {Number} data.toUserId - 目标用户ID
 * @param {Number} data.toUserType - 目标用户类型
 * @param {Object} data.sdp - SDP数据（offer/answer时使用）
 * @param {Object} data.candidate - ICE候选数据（ice-candidate时使用）
 */
export function sendWebRTCSignal(data) {
  return request.post('/im/video-call/signal', data)
}

/**
 * 发送WebRTC Offer
 * @param {String} callId - 通话ID
 * @param {Number} toUserId - 目标用户ID
 * @param {Number} toUserType - 目标用户类型
 * @param {Object} sdp - SDP数据
 */
export function sendOffer(callId, toUserId, toUserType, sdp) {
  return request.post(`/im/video-call/offer/${callId}?toUserId=${toUserId}&toUserType=${toUserType}`, sdp)
}

/**
 * 发送WebRTC Answer
 * @param {String} callId - 通话ID
 * @param {Number} toUserId - 目标用户ID
 * @param {Number} toUserType - 目标用户类型
 * @param {Object} sdp - SDP数据
 */
export function sendAnswer(callId, toUserId, toUserType, sdp) {
  return request.post(`/im/video-call/answer/${callId}?toUserId=${toUserId}&toUserType=${toUserType}`, sdp)
}

/**
 * 发送ICE候选
 * @param {String} callId - 通话ID
 * @param {Number} toUserId - 目标用户ID
 * @param {Number} toUserType - 目标用户类型
 * @param {Object} candidate - ICE候选数据
 */
export function sendIceCandidate(callId, toUserId, toUserType, candidate) {
  return request.post(`/im/video-call/ice-candidate/${callId}?toUserId=${toUserId}&toUserType=${toUserType}`, candidate)
}

/**
 * 获取通话记录
 * @param {Object} params - 查询参数
 * @param {Number} params.pageNo - 页码
 * @param {Number} params.pageSize - 每页数量
 */
export function getCallRecords(params) {
  return request.get('/im/video-call/records', params)
}

/**
 * 获取通话记录详情
 * @param {String} callId - 通话ID
 */
export function getCallRecord(callId) {
  return request.get(`/im/video-call/record/${callId}`)
}

/**
 * 检查用户是否在线
 * @param {Number} userId - 用户ID
 * @param {Object} params - 查询参数
 * @param {Number} params.userType - 用户类型
 */
export function checkUserOnline(userId, params = { userType: 1 }) {
  return request.get(`/im/video-call/status/online/${userId}`, params)
}

/**
 * 检查用户是否正在通话中
 * @param {Number} userId - 用户ID
 * @param {Object} params - 查询参数
 * @param {Number} params.userType - 用户类型
 */
export function checkUserInCall(userId, params = { userType: 1 }) {
  return request.get(`/im/video-call/status/in-call/${userId}`, params)
}

/**
 * 获取视频通话配置
 */
export function getVideoCallConfig() {
  return request.get('/im/video-call/config')
}
